繼承是一個重要的程式設計概念,它允許智能合約重複使用和擴展現有的合約代碼,以減少代碼的冗余。繼承機制使得合約可以建立在已有合約的基礎上,實現代碼的複用和分層設計。
virtual 和 override 關鍵字
如果你希望子合約能夠重寫父合約中的函數,你需要在父合約中使用 virtual 關鍵字來標記該函數。而在子合約中,如果你要重寫父合約的函數,需要使用 override 關鍵字。
繼承非常直觀,可以通過使用 is 關鍵字來實現。例如,contract 子合約 is 父合約 表示子合約繼承了父合約的功能。子合約可以繼承父合約的函數、狀態變數等。
Solidity 支持多重繼承,這意味著一個合約可以同時繼承多個父合約。需要注意的是,在繼承多個合約時,應按照從輩分最高到最低的順序排列合約名,並確保重寫在子合約中正確實現。
修飾器也可以繼承,使用 virtual 和 override 關鍵字可以繼承修飾器,使其能夠在子合約中進行修改。
子合約可以繼承父合約的構造函數。有兩種方式可以實現
1.在繼承聲明中傳遞構造函數的參數。
2.在子合約的構造函數中聲明參數,這樣可以確保子合約初始化時也會執行父合約的構造函數。
子合約可以通過直接調用父合約的函數來訪問其功能。這可以通過使用父合約名稱,例如 父合約.函數名() 來實現。此外,也可以使用 super 關鍵字來調用最近的父合約的函數。
鑽石繼承是一種多重繼承鏈的情況,即子合約同時有兩個或兩個以上的基類。在多重繼承鏈上使用 super 關鍵字時需要注意,它會依次調用繼承鏈上的每個合約的相關函數,確保正確的順序和邏輯。
WTF Solidity Inheritance
Solidity Develop 繼承